package com.ruoyi.system.service;

import java.util.List;

import com.ruoyi.system.domain.WhOrder;
import com.ruoyi.system.domain.params.*;
import com.ruoyi.system.domain.vo.*;

/**
 * 客户订单Service接口
 *
 * @author ruoyi
 * @date 2023-02-26
 */
public interface IWhOrderService {
    /**
     * 查询客户订单
     *
     * @param id 客户订单主键
     * @return 客户订单
     */
    public WhOrder selectWhOrderById(Integer id);

    /**
     * 获取编辑详情
     * @param id
     * @return
     */
    public EditOrderInfoVo selectEditOrderById(Integer id);

    /**
     * 获取订单详情（常规数据）
     * @param id 订单id
     * @return
     */
    OrderInfoVo getOrderInfoById(Integer id);

    /**
     * 查询客户订单列表
     *
     * @param whOrder 客户订单
     * @return 客户订单集合
     */
    public List<OrderListVo> selectWhOrderList(OrderListParams whOrder);

    /**
     * 新增客户订单
     *
     * @param params 客户订单
     * @return 结果
     */
    public WhOrder insertWhOrder(SaveOrderParams params);

    /**
     * 修改客户订单
     *
     * @param params 客户订单
     * @return 结果
     */
    public int updateWhOrder(SaveOrderParams params);

    /**
     * 批量删除客户订单
     *
     * @param ids 需要删除的客户订单主键集合
     * @return 结果
     */
    public int deleteWhOrderByIds(Integer[] ids);

    /**
     * 删除客户订单信息
     *
     * @param id 客户订单主键
     * @return 结果
     */
    public int deleteWhOrderById(Integer id);

    /**
     * 初始化订单
     * @return
     */
    OrderInitVo initOrder();

    /**
     * 司机创建订单
     * @param params
     * @return
     */
    WhOrder createOrder(CreateOrderParams params);

    /**
     * 更新订单信息
     * @param params
     * @return
     */
    int updateOrder(CreateOrderParams params);

    /**
     * 打印订单 - 支持批量
     * @param ids
     * @return
     */
    void printOrder(Integer[] ids, String createBy);

    void printOrderV2(PrinterParam param);

    /**
     * 仓管、财务打单
     * @param params
     */
    void managerPrint(ManagerPrintParams params);

    /**
     * 仓管端获取订单列表
     * @param keyword
     * @return
     */
    List<ManagerOrderListVo> findManagerOrderList(String keyword);
}
